home *** CD-ROM | disk | FTP | other *** search
/ Workbench Add-On / Workbench Add-On - Volume 1.iso / Dev / Oberon / examples.lha / Examples / Oberon0 / RunOberon0.mod < prev    next >
Encoding:
Text File  |  1995-07-02  |  4.0 KB  |  139 lines

  1. (**************************************************************************
  2.  
  3.      $RCSfile: RunOberon0.mod $
  4.   Description: Main module for the Oberon-A implementation of the Oberon0
  5.                System described in Mössenböck's "Object-Oriented
  6.                Programming in Oberon-2".
  7.  
  8.    Created by: fjc (Frank Copeland)
  9.     $Revision: 1.1 $
  10.       $Author: fjc $
  11.         $Date: 1995/07/02 17:02:27 $
  12.  
  13.   Copyright © 1995, Frank Copeland.
  14.   This module is part of Oberon-A.
  15.   See Oberon-A.doc for conditions of use and distribution.
  16.  
  17. **************************************************************************)
  18.  
  19. <*STANDARD-*> <*MAIN+*>
  20. MODULE RunOberon0;
  21.  
  22. IMPORT
  23.   SYS := SYSTEM, Errors, k := Kernel, Viewers0, Shapes0, Rectangles0,
  24.   Texts0, FoldElems0, GraphicElems0, Edit0, Draw0, Oberon0, d := Dos,
  25.   wb := Workbench;
  26.  
  27. VAR
  28.   startDir : d.FileLockPtr;
  29.  
  30. PROCEDURE Register;
  31.  
  32.   VAR
  33. <* IF REGISTER THEN *>
  34.     node : k.RegNode;
  35. <* ELSE *>
  36.     mod : k.Module; typ : k.Type; cmd : k.Command;
  37. <* END *>
  38.  
  39.  
  40. <* IF REGISTER THEN *>
  41.   PROCEDURE PrintModule ( modName : ARRAY OF CHAR );
  42.  
  43.     VAR mod : k.Module; node : k.RegNode;
  44.  
  45.     <*$CopyArrays-*>
  46.     BEGIN (* PrintModule *)
  47.       mod := k.FindModule (modName);
  48.       IF mod # NIL THEN
  49.         d.PrintF ("Module '%s'\n", SYS.ADR (modName));
  50.         node := mod.types;
  51.         IF node # NIL THEN
  52.           WHILE node # NIL DO
  53.             d.PrintF ("  type: '%s'\n", SYS.ADR (node.name));
  54.             node := node.next
  55.           END;
  56.         ELSE
  57.           d.PrintF ("  no types\n", NIL)
  58.         END;
  59.         node := mod.commands;
  60.         IF node # NIL THEN
  61.           WHILE node # NIL DO
  62.             d.PrintF ("  command: '%s'\n", SYS.ADR (node.name));
  63.             node := node.next
  64.           END;
  65.         ELSE
  66.           d.PrintF ("  no commands\n", NIL)
  67.         END;
  68.       ELSE
  69.         d.PrintF ("Could not find module '%s'\n", SYS.ADR (modName))
  70.       END;
  71.     END PrintModule;
  72. <* END *>
  73.  
  74.   BEGIN (* Register *)
  75. <* IF REGISTER THEN *>
  76.   (*
  77.     node := k.modules;
  78.     WHILE node # NIL DO
  79.       PrintModule (node.name);
  80.       node := node.next
  81.     END;
  82.   *)
  83. <* ELSE *>
  84.     mod := k.RegisterModule ("Viewers0");
  85.       cmd := k.RegisterCommand (mod, "Close", Viewers0.Close);
  86.       cmd := k.RegisterCommand (mod, "Copy", Viewers0.Copy);
  87.     mod := k.RegisterModule ("Shapes0");
  88.       typ := k.RegisterType (mod, SYS.TAG (Shapes0.Graphic));
  89.     mod := k.RegisterModule ("Rectangles0");
  90.       typ := k.RegisterType (mod, SYS.TAG (Rectangles0.Rectangle));
  91.       cmd := k.RegisterCommand (mod, "Set", Rectangles0.Set);
  92.     mod := k.RegisterModule ("Texts0");
  93.       typ := k.RegisterType (mod, SYS.TAG (Texts0.Element));
  94.     mod := k.RegisterModule ("FoldElems0");
  95.       typ := k.RegisterType (mod, SYS.TAG (FoldElems0.Element));
  96.       cmd := k.RegisterCommand (mod, "Insert", FoldElems0.Insert);
  97.     mod := k.RegisterModule ("GraphicElems0");
  98.       typ := k.RegisterType (mod, SYS.TAG (GraphicElems0.Element));
  99.       cmd := k.RegisterCommand (mod, "Insert", GraphicElems0.Insert);
  100.       cmd := k.RegisterCommand (mod, "Update", GraphicElems0.Update);
  101.     mod := k.RegisterModule ("Edit0");
  102.       cmd := k.RegisterCommand (mod, "Open", Edit0.Open);
  103.       cmd := k.RegisterCommand (mod, "Store", Edit0.Store);
  104.       cmd := k.RegisterCommand (mod, "ChangeFont", Edit0.ChangeFont);
  105.     mod := k.RegisterModule ("Draw0");
  106.       cmd := k.RegisterCommand (mod, "Open", Draw0.Open);
  107.       cmd := k.RegisterCommand (mod, "Store", Draw0.Store);
  108. <* END *>
  109.   END Register;
  110.  
  111. PROCEDURE* Cleanup ( VAR rc : LONGINT );
  112.  
  113.   VAR ignore : d.FileLockPtr;
  114.  
  115.   BEGIN (* Cleanup *)
  116.     ignore := d.CurrentDir (startDir); startDir := NIL
  117.   END Cleanup;
  118.  
  119. PROCEDURE Init;
  120.  
  121.   VAR wbStartup : wb.WBStartupPtr;
  122.  
  123.   BEGIN (* Init *)
  124.     IF k.fromWorkbench THEN
  125.       wbStartup := SYS.VAL (wb.WBStartupPtr, k.WBenchMsg);
  126.       IF wbStartup.numArgs > 0 THEN
  127.         startDir := d.CurrentDir (wbStartup.argList[0].lock);
  128.         k.SetCleanup (Cleanup)
  129.       END
  130.     END
  131.   END Init;
  132.  
  133. BEGIN
  134.   Errors.Init();
  135.   Register;
  136.   Init;
  137.   Oberon0.Loop
  138. END RunOberon0.
  139.